<div id="docs">
	<h1><strong>docs</strong></h1>

	<div class="text">
		
		<strong>Jails</strong> - Singleton da aplicação.
		
		<ul>
			<li>
				<strong class="namespace">Jails.namespace</strong> <strong class="type">{Object}</strong> Singleton
				<p class="description">Objeto que carrega os namespaces de projetos javascripts internos ou externos.</p>	
			</li>
			<li>
				<strong class="namespace">Jails.namespace</strong><strong class="type">.add( String, String )</strong>
				<p class="description">Método que adiciona um novo namespace no projeto, usando um alias.</p>
				<p class="example">Ex: Jails.namespace.add('javiani', 'http://javiani.googlecode.com/svn/trunk/src/js/')</p>
			</li>
			<li>
				<strong class="namespace">Jails.namespace</strong><strong class="type">.load(String*, [Function])</strong>
				<p class="description">Método usado para carregar scripts externos, usa os alias criados pelo método <strong>.add</strong>.</p>
				<p class="example">
					Ex:  
					Jails.namespace.load(
						'{javiani}slider/slider.js',
						'js/main.js',
						function(){ alert('loaded'); }
					)
				</p>	
			</li>
			<li>
			<strong class="namespace">Jails.namespace.using( String* )</strong> <strong class="type">:Function</strong>
				<p class="description">Método com o mesmo propósito de .load, mas o callback é usado for a da chamada do método.</p>
				<p class="example">
					Ex:
					 Jails.namespace.using(
						'{external}js/someexternalscript.js',
						'{libs}js/somelibscript.js',
						'{assets}js/main.js'
					)
					(function(){
						alert('Scripts loaded')
					})
				</p>
			</li>
			
            <li>
				<strong class="namespace">Jails.url</strong>  <strong class="type">{Object}</strong> Singleton
				<p class="description">Objeto que  carrega métodos e propriedades referentes as url's ( internas ou externas ).</p>
			</li>
        	
            <li>
				<strong class="namespace">Jails.url.observe()</strong>
				<p class="description">
					Jails possui um location, como o do navegador, internamente usado para direcionar as ações de acordo com as rotas. 
					Para que o Jails modifique o location do navegador ao invés do location interno, basta utilizar este método. 
				<strong>* O Jails usará o símbolo '#' para alterar a url.</strong>
			</li>

			<li>
				<strong class="namespace">Jails.url.root</strong> <strong class="type">{String}</strong>
				<p class="description">Propriedade que pode ser alterada para mudar o valor do endereço root da aplicação. Por padrão é utilizado o '#!'.</p>
			</li>
			<li>
				<strong class="namespace">Jails.url.path()</strong> <strong class="type">:String</strong>
				<p class="description">Retorna a url atual.</p>
			</li>	
			<li>
				<strong class="namespace">Jails.url.redirect([String|Object], [Object])</strong> 
				<p class="description">
					Método mais usado na aplicação que fará as trocas das urls que posteriormente serão filtradas pelas rotas. 
					É sobrecarregado para ser usado de 3 formas:
				</p>
				<p class="example">
					Usando uma string
					Jails.url.redirect('/home/message/hello world')
				</p>
				<p class="example">Usando um objeto
				Jails.url.redirect({message :'hello world'}) // Se alguma chave tiver um valor falsy, esta será descartada.</p>
				<p class="example">Ou usando uma string seguida de um objeto
				Jails.url.redirect('/home', { message : 'hello world'})</p>
			</li>
            <li>
				<strong class="namespace">Jails.params</strong> <strong class="type">{Object}</strong>
				<p class="description">
			        Propriedade que armazena os parâmetros que foram pegos nas rotas.
                </p>

				<p><strong>* Os parâmetros atualizados serão apenas aqueles que forem pegos nas rotas.</strong></p>
			</li>

			<li>
				<strong class="namespace">Jails.extend( String, Object )</strong>
				<p class="description">
					Método usado para estender os objetos do tipo Model, View e Controller do Jails. 
					O primeiro parâmetro é uma string indicando qual dos três elementos quero estender 
					e o segundo parâmetro é um objeto usado como o elemento estendido.
				</p>
				<p class="example">
					Ex:

					Jails.extend('Model', {})
					Jails.extend('View', {})

					Jails.extend('Controller', {
						Class: function(){
							this.index = function(){ }
						}
					})
				</p>

				<strong>
					** Os três elementos devem estar definidos no mínimo como o exemplo acima, 
					Controllers devem possuir um Class contendo todas as actions.
				</strong>
				
				<p class="description">
					Jails integrará dentro de si estes três objetos, portanto, é possível em qualquer lugar da aplicação 
					acessar os objetos estendidos através da seguinte notação: Jails.Model, Jails.View, Jails.Controller.
				</p>
			</li>
			<li>
				<strong>Heranças</strong>
				<p class="description">
					O Singleton Model apenas possuirá uma propriedade <strong>.data</strong> dentro de si para guardar 
					informações que podem ser usadas tanto pelas views quanto pelas actions das controllers.
				</p>
				<p>
					O Singleton View herda o método .inject( Object, String ) usado para fazer um replace 
					de valores de um objeto json em uma string com wildcards padrões.
				</p>
				<p class="example">Ex:  View.inject({ mensagem : 'Olá Mundo!!' }, '@{mensagem}')</p>
				<p class="description">O Singleton Controller não herda atualmente nenhum método, é apenas usado para definir as actions.</p>
			</li>
			<li>
				<strong>Rotas</strong>

				<p class="description">
					As rotas são filtros usados nas url's internas do Jails responsáveis por chamar as devidas actions.
					É uma lista com prioridades decrescentes de objetos contendo uma chave url do tipo String e um valor do tipo Function. 
					A url é usada como filtro e a função é executada ao cair na url especificada.
				</p>
				
				<p class="description">
					Os parâmetros são pegos através de um símbolo “:” antes da palavra-chave criada. 
					Este parâmetro será usado como parâmetro da função usada para a rota. 
					Os parâmetros são passados para a função na mesma ordem em que aparecem na url.
				</p>
				
				<p class="example">
					Ex:

					Jails.routes = [
						{'/home/message/:message' :function(msg){
							Controller.message(msg);
						}}					
                    ] 
				</p>
				<p class="description">
					**No exemplo acima, se a url cair na primeira rota, ela não cairá na segunda, 
					mesmo que haja um match com '/home' , pois a prioridade mais alta é da url mais próxima do índice 0 do array.
				</p>
			</li>
		</ul>

	</div>

</div>
